package com.xl.bigdata;

import cn.hutool.core.io.FileUtil;
import com.hankcs.hanlp.HanLP;
import com.hankcs.hanlp.dictionary.py.Pinyin;
import com.hankcs.hanlp.seg.Segment;
import com.hankcs.hanlp.seg.common.Term;
import com.hankcs.hanlp.suggest.Suggester;

import java.io.File;
import java.nio.charset.StandardCharsets;
import java.util.List;

/**
 * @ClassName App
 * @Description TODO
 * * 中文分类与情感分析
 *  * https://github.com/hankcs/HanLP/wiki/%E6%96%87%E6%9C%AC%E5%88%86%E7%B1%BB%E4%B8%8E%E6%83%85%E6%84%9F%E5%88%86%E6%9E%90#%E6%83%85%E6%84%9F%E5%88%86%E6%9E%90
 *
 *  * HanLP Java项目的GitHub
 *  * https://github.com/hankcs/HanLP/tree/1.x
 *
 *  * HanLP Python项目的GitHub
 *  * https://github.com/hankcs/HanLP/
 * @Author xl.gao
 * @Date 2022/2/8 8:56
 * @Version
 */
public class App {

    public static void main(String[] args) {

        pinyin();
//        workPY();

//        workTJ();
    }

    public static void pinyin(){
        String text = "重载不是重任";
        List<Pinyin> pinyinList = HanLP.convertToPinyinList(text);
        System.out.print("原文,");
        for (char c : text.toCharArray())
        {
            System.out.printf("%c,", c);
        }
        System.out.println();

        System.out.print("拼音（数字音调）,");
        for (Pinyin pinyin : pinyinList)
        {
            System.out.printf("%s,", pinyin);
        }
        System.out.println();

        System.out.print("拼音（符号音调）,");
        for (Pinyin pinyin : pinyinList)
        {
            System.out.printf("%s,", pinyin.getPinyinWithToneMark());
        }
        System.out.println();

        System.out.print("拼音（无音调）,");
        for (Pinyin pinyin : pinyinList)
        {
            System.out.printf("%s,", pinyin.getPinyinWithoutTone());
        }
        System.out.println();

        System.out.print("声调,");
        for (Pinyin pinyin : pinyinList)
        {
            System.out.printf("%s,", pinyin.getTone());
        }
        System.out.println();

        System.out.print("声母,");
        for (Pinyin pinyin : pinyinList)
        {
            System.out.printf("%s,", pinyin.getShengmu());
        }
        System.out.println();

        System.out.print("韵母,");
        for (Pinyin pinyin : pinyinList)
        {
            System.out.printf("%s,", pinyin.getYunmu());
        }
        System.out.println();

        System.out.print("输入法头,");
        for (Pinyin pinyin : pinyinList)
        {
            System.out.printf("%s,", pinyin.getHead());
        }
        System.out.println();
    }

    public static void zidongzhaiyao(){
        String document = "\"WX任娜(hic1521) 2022-02-14 12:22:19\n" +
                "新年好，我是海尔智家专属客服，很高兴为您服务！\n" +
                "WX任娜(hic1521) 2022-02-14 12:22:31\n" +
                "新年好，小智很高兴为您服务，请问有什么需要帮助的吗？\n" +
                "匿名(1162765652) 2022-02-14 12:22:50\n" +
                "这卡萨帝的洗衣机质量也太差了吧，可以换一台吗\n" +
                "匿名(1162765652) 2022-02-14 12:23:04\n" +
                "修了好几次了\n" +
                "WX任娜(hic1521) 2022-02-14 12:24:14\n" +
                "请问您机器是什么型号的呢？您可以在机身上的中国能效标识、发票跟说明书可以找到的哦\n" +
                "匿名(1162765652) 2022-02-14 12:24:26\n" +
                "老是维修很不方便\n" +
                "WX任娜(hic1521) 2022-02-14 12:25:08\n" +
                "请留下您的姓名，电话，详细地址（**省**市**区/县**路**小区**号楼**单元**室），小智帮您安排哈\n" +
                "匿名(1162765652) 2022-02-14 12:25:34\n" +
                "前两天有报修，\n" +
                "WX任娜(hic1521) 2022-02-14 12:25:38\n" +
                "好的\n" +
                "WX任娜(hic1521) 2022-02-14 12:25:51\n" +
                "广东省 深圳市 龙岗区 园山街道荷坳新村别墅区\n" +
                "WX任娜(hic1521) 2022-02-14 12:25:56\n" +
                "13422034856\n" +
                "匿名(1162765652) 2022-02-14 12:26:00\n" +
                "是的\n" +
                "WX任娜(hic1521) 2022-02-14 12:26:16\n" +
                "14日18:00至19:00上门 可以吗\n" +
                "匿名(1162765652) 2022-02-14 12:26:26\n" +
                "我要换机，质量太差了\n" +
                "匿名(1162765652) 2022-02-14 12:26:44\n" +
                "麻烦帮我安排处理\n" +
                "WX任娜(hic1521) 2022-02-14 12:27:32\n" +
                "好的\n" +
                "WX任娜(hic1521) 2022-02-14 12:27:37\n" +
                "小智帮您反馈l\n" +
                "WX任娜(hic1521) 2022-02-14 12:27:51\n" +
                "售后14日15:00前回电联系您\n" +
                "WX任娜(hic1521) 2022-02-14 12:30:51\n" +
                "您已经好长时间没有搭理小智了哦，如果长时间未回复，系统会自动关闭对话的~\n" +
                "WX任娜(hic1521) 2022-02-14 12:42:19\n" +
                "友情提示：为了节省您的宝贵时间，若您的海尔家电需要安装、维修，您可以在“海尔智家app”-“服务”中进行在线预约，还可以实时查询服务进度、收费标准、在线评价等，方便快捷。祝您生活愉快~\n" +
                "WX任娜(hic1521) 2022-02-14 12:42:20\n" +
                "坐席退出\"";
        String content = "程序员(英文Programmer)是从事程序开发、维护的专业人员。一般将程序员分为程序设计人员和程序编码人员，但两者的界限并不非常清楚，特别是在中国。软件从业人员分为初级程序员、高级程序员、系统分析员和项目经理四大类。";
        List<String> keywordList = HanLP.extractKeyword(document, 100);
        System.out.println(keywordList);
    }

    public static void duanyu(){
        String text = "自行车算法工程师\n" +
                "算法（Algorithm）自行车是一系列解决问题的清晰指令，也就自行车是说，能够对一定规自行车范的输入，在有限时间内获得所要求的输出。如果一个算法有缺陷，或不适合于某个问题，执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。算法工程师就是利用算法处理事物的人。\n" +
                "自行车\n" +
                "1职位简介自行车\n" +
                "算法工程师是一个自行车非常高端的职位；自行车\n" +
                "专业要求：计算机、电子、通信、数学等相关专业；自行车\n" +
                "学历要求：本科及其以上的学历，大多数是硕士学历及其以上；自行车\n" +
                "语言要求：英语要求是熟练，基本上能阅读国外专业书刊；自行车\n" +
                "必须掌握计算机相关知识，熟练使用仿真工具MATLAB等，必须会一门编程语言自行车。\n" +
                "自行车\n" +
                "2研究方向自行车\n" +
                "视频算法工程师、图像处理算法工程师、音频算法工程师 通信基带算法工程师自行车\n" +
                "自行车\n" +
                "3目前国内外状况自行车\n" +
                "目前国内从事算法研究的工程师不少，自行车但是高级算法工程师却很少，是一个非常紧缺的专业工程师。算法工程师根据研究领域来分主要有音频/视频算法处理、图像技术方面的二维信息算法处理和通信物理层、雷达信号处理、生物医学信号处理等领域的一维信息算法处理。\n" +
                "自行车在计算机音视频和图形图像技术等二维信息算法处理方面目前比较先进的视频处理算法：机器视觉成为此类算法研究的核心；另外还有2D转3D算法(2D-to-3D conversion)，去隔行算法(de-interlacing)，运动估计运动补偿算法(Motion estimation/Motion Compensation)，去噪算法(Noise Reduction)，缩放算法(scaling)，锐化处理算法(Sharpness)，超分辨率算法(Super Resolution),手势识别(gesture recognition),人脸识别(face recognition)。\n" +
                "自行车在通信物理层等一维信息领域目前常用的算法：无线领域的RRM、RTT，传送领域的调制解调、信道均衡、信号检测、网络优化、信号分解等。\n" +
                "自行车另外数据挖掘、互联网搜索算法也成为当今的热门方向。\n" +
                "自行车算法工程师逐渐往人工智能方向发展。";
        List<String> phraseList = HanLP.extractPhrase(text, 10);
        phraseList.forEach(str -> {
            String[] split = str.split(",");
            for (String s : split) {

                if(s.contains("ns"))
                    System.out.println(s);
            }
        });

    }

    public static void workPY(){
        String text = "重载不是重任";
        List<Pinyin> pinyinList = HanLP.convertToPinyinList(text);
        System.out.print("原文,");
        for (char c : text.toCharArray())
        {
            System.out.printf("%c,", c);
        }
        System.out.println();

        System.out.print("拼音（数字音调）,");
        for (Pinyin pinyin : pinyinList)
        {
            System.out.printf("%s,", pinyin);
        }
        System.out.println();

        System.out.print("拼音（符号音调）,");
        for (Pinyin pinyin : pinyinList)
        {
            System.out.printf("%s,", pinyin.getPinyinWithToneMark());
        }
        System.out.println();

        System.out.print("拼音（无音调）,");
        for (Pinyin pinyin : pinyinList)
        {
            System.out.printf("%s,", pinyin.getPinyinWithoutTone());
        }
        System.out.println();

        System.out.print("声调,");
        for (Pinyin pinyin : pinyinList)
        {
            System.out.printf("%s,", pinyin.getTone());
        }
        System.out.println();

        System.out.print("声母,");
        for (Pinyin pinyin : pinyinList)
        {
            System.out.printf("%s,", pinyin.getShengmu());
        }
        System.out.println();

        System.out.print("韵母,");
        for (Pinyin pinyin : pinyinList)
        {
            System.out.printf("%s,", pinyin.getYunmu());
        }
        System.out.println();

        System.out.print("输入法头,");
        for (Pinyin pinyin : pinyinList)
        {
            System.out.printf("%s,", pinyin.getHead());
        }
        System.out.println();
    }

    public static void workTJ(){
        Suggester suggester = new Suggester();
        String[] titleArray =
                (
                        "威廉王子发表演说 呼吁保护野生动物\n" +
                                "《时代》年度人物最终入围名单出炉 普京马云入选\n" +
                                "“黑格比”横扫菲：菲吸取“海燕”经验及早疏散\n" +
                                "日本保密法将正式生效 日媒指其损害国民知情权\n" +
                                "英报告说空气污染带来“公共健康危机”"
                ).split("\\n");
        for (String title : titleArray)
        {
            suggester.addSentence(title);
        }

        System.out.println(suggester.suggest("发言", 1));       // 语义
        System.out.println(suggester.suggest("危机公共", 1));   // 字符
        System.out.println(suggester.suggest("mayun", 1));      // 拼音
    }
}
